画像をブラウザ内で動かす
JavaScriptを使用すると、ブラウザ内で画像をビリヤードの玉のように動かすことができるようになります。JavaScriptの記述は少し複雑になってしまいますが、特に難しいところはありません。ぜひとも、チャレンジしてみてください。

→ まずはサンプルを確認してください
 
画像をブラウザ内で動かす サンプルページ


→ JavaScriptの呼び出しとレイヤーの作成
 
まずは、BODYタグにonloadイベントを追加し、自作のJavaScript関数「Check()」を呼び出します。「Check()」はブラウザの種類を判別するための自作関数ですが、この関数内にsetIntervalを使用することにより、画像を動かす自作関数「Main()」を一定間隔で呼び出します。続いて、画像が動くためのレイヤーをDIVタグで作成し、動かす画像をIMGタグで配置します。
<BODY bgcolor="#888888" text="#000000" onload="Check()">

<DIV ID="FlyImg" style="position:absolute">
<IMG src="ugoku.gif">
</DIV>
  • DIVタグには必ずID名をつけるようにします。またスタイルを「position:absolute」とし、要素を絶対位置で指定するようにします。
  • IMGタグでは、動かす画像を貼り付けてください。


→ 変数の設定と自作関数「Check()」の作成
 
次に、JavaScriptで使用する変数を設定します。
ここでは、画像が異動するレイヤーのID名(ID)と画像のサイズ(Xsize、Ysize)、ブラウザチェック用の変数(Ns、Ie)、オブジェクト退避用変数(obj)を設定します。
また、現在の画像位置(X、Y)、移動範囲の左上端座標(Xs、Ys)、右下端座標(Xe、Ye)を、とりあえず0に設定しておきます。
続いて自作関数「Check()」を作成します。自作関数「Check()」ではif文を使用し、適合ブラウザの場合に限り、setIntervalで自作関数「Main()」を呼び出すようにしておきます。
<SCRIPT language="JavaScript">
<!--

ID="FlyImg";
Xsize=40; Ysize=40;

Ns=document.getElementById;
Ie=document.all;
Obj="";

X=0; Y=0; Xs=0; Ys=0; Xe=0; Ye=0;

function Check(){
   if(Ie || Ns){setInterval("Main()",100)}
}

//-->
</SCRIPT>
  • 変数IDには、画像を貼り付けたレイヤーのID名を指定してください。
  • Xsize、Ysizeには、画像の横幅、高さをピクセル数で指定します。
  • 自作関数「Check()」では、InternetExplorerまたはNetscape Navigator 6以上であった場合のみ、自作関数「Main()」を0.1秒間隔で呼び出すようにしています。


→ 画像を動かす自作関数「Main()」の作成
 
これから解説する自作関数「Main()」が、実際に画像を動かすJavaScriptとなります。
ここでは、まず最初にObj、Xs、Ys、Xe、Yeといった変数の値をブラウザごとに取得します。続いて、画像がブラウザ画面の端まできたときに、移動量(XX、YY)が乱数により変更されるような記述を追加します。あとは、画像の現在位置(X、Y)に移動量(XX、YY)を加えて、再表示させれば動く画像の完成です。
<SCRIPT language="JavaScript">
<!--

ID="FlyImg";
Xsize=40; Ysize=40;

Ns=document.getElementById;
Ie=document.all;
Obj="";

X=0; Y=0; Xs=0; Ys=0; Xe=0; Ye=0;

function Check(){
   if(Ie || Ns){setInterval("Main()",100)}
}

function Main(){

  //変数の取得
  if (Ie){
    Obj=document.all[ID].style;
    Xs=document.body.scrollLeft;
    Ys=document.body.scrollTop;
    Xe=Xs+document.body.clientWidth-Xsize;
    Ye=Ys+document.body.clientHeight-Ysize;
    px="px";
  }else if(Ns){
    Obj=document.getElementById(ID).style;
    Xs=pageXOffset;
    Ys=pageYOffset;
    Xe=Xs+innerWidth-Xsize;
    Ye=Ys+innerHeight-Ysize;
    px="px";
  }

  //移動量を決める
  if(X<=Xs) XX=Math.floor(Math.random()*20)+10;
  if(X>=Xe) XX=(Math.floor(Math.random()*20)+10)*(-1);
  if(Y<=Ys) YY=Math.floor(Math.random()*20)+10;
  if(Y>=Ye) YY=(Math.floor(Math.random()*20)+10)*(-1);

  //移動後の位置
  X=X+XX;
  if(X<Xs){X=Xs}; if(X>Xe){X=Xe}
  Y=Y+YY;
  if(Y<Ys){Y=Ys}; if(Y>Ye){Y=Ye}

  //描画
  Obj.left=X+px;
  Obj.top=Y+px;
}

//-->
</SCRIPT>
  • 変数Xe、Yeは、移動させる画像のサイズ(Xsize、Ysize)ぶんだけ差し引いて取得するようにします。
  • 移動量(XX、YY)は、現在の画像位置(X、Y)がブラウザの四隅より外になった場合のみ変更するようにします。
  • 移動量(XX、YY)の計算には、random()を利用し、四隅にぶつかるたびに移動量が変化するようにします。
  • 移動後の位置は、現在の画像位置(X、Y)に移動量(XX、YY)を加えてやることにより算出できます。なお、移動後の位置がブラウザの四隅より外にはみださすことがないように、if文による修正を加えておくことを忘れないでください。
  • 画像の移動(再描画)は、変数objのleftとtopを変更することにより実現されます。

PCpylg}Wz O~yz Yahoo yV NTT-X Store

z[y[W NWbgJ[h COiq [ COsI COze